package com.example.designpattern.structural.bridge;

import com.example.designpattern.structural.bridge.color.Blue;
import com.example.designpattern.structural.bridge.color.Red;
import com.example.designpattern.structural.bridge.color.Yellow;
import com.example.designpattern.structural.bridge.shape.Rectangle;
import com.example.designpattern.structural.bridge.shape.Round;
import com.example.designpattern.structural.bridge.shape.Triangle;
import org.junit.Test;

public class User {
    @Test
    public void drawTest() {
        Rectangle rectangle = new Rectangle();
        // 通过给形状注入颜色即可实现四种颜色
        rectangle.setColor(new Red());
        rectangle.draw();

        Round round = new Round();
        round.setColor(new Blue());
        round.draw();

        Triangle triangle = new Triangle();
        triangle.setColor(new Yellow());
        triangle.draw();
    }

    // 这时我们再来回顾一下官方定义：将抽象部分与它的实现部分分离，使它们都可以独立地变化。
    // 抽象部分指的是父类，对应本例中的形状类，实现部分指的是不同子类的区别之处。
    // 将子类的区别方式 —— 也就是本例中的颜色 —— 分离成接口，通过组合的方式桥接颜色和形状，这就是桥接模式，
    // 它主要用于两个或多个同等级的接口。

}
